package org.hfy.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.hfy.dto.LabelCreateDTO;
import org.hfy.service.LabelService;
import org.hfy.utils.HtmlToPdfUtils;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 * 标签服务实现类
 * 
 * @author hfy
 * @version 1.0
 */
@Slf4j
@Service
public class LabelServiceImpl implements LabelService {

    @Override
    public byte[] generateLabelPdf(LabelCreateDTO labelData) {
        try {
            // 读取标签模板
            String templateContent = loadTemplate();
            
            // 填充模板数据
            String filledContent = fillTemplateData(templateContent, labelData);
            
            // 转换为PDF（使用标签专用方法）
            return HtmlToPdfUtils.convertLabelHtmlToPdf(filledContent);
            
        } catch (Exception e) {
            log.error("生成标签PDF失败: error={}", e.getMessage(), e);
            throw new RuntimeException("生成标签PDF失败: " + e.getMessage());
        }
    }

    /**
     * 加载标签模板
     */
    private String loadTemplate() throws IOException {
        try (InputStream inputStream = getClass().getClassLoader()
                .getResourceAsStream("templates/label_temp.html")) {
            
            if (inputStream == null) {
                throw new IOException("标签模板文件不存在: templates/label_temp.html");
            }
            
            Scanner scanner = new Scanner(inputStream, StandardCharsets.UTF_8.name()).useDelimiter("\\A");
            return scanner.hasNext() ? scanner.next() : "";
        }
    }

    /**
     * 填充模板数据
     */
    private String fillTemplateData(String template, LabelCreateDTO labelData) {
        // 基础信息替换
        template = template.replace("${订单编号}", 
            labelData.getOrderNumber() != null ? labelData.getOrderNumber() : "");
        template = template.replace("${物料编码}", 
            labelData.getMaterialCode() != null ? labelData.getMaterialCode() : "");
        template = template.replace("${客户型号}", 
            labelData.getCustomerModel() != null ? labelData.getCustomerModel() : "");
        template = template.replace("${生产编码}", 
            labelData.getProductionCode() != null ? labelData.getProductionCode() : "");
        template = template.replace("${数量}", 
            labelData.getQuantity() != null ? labelData.getQuantity() : "");
        template = template.replace("${生产日期}", 
            labelData.getProductionDate() != null ? labelData.getProductionDate() : "");

        return template;
    }
} 